package src.C_io;

import java.io.FileInputStream;
import java.io.IOException;

// 字节输入流（单次读取）
public class Demo02 {
    public static void main(String[] args) throws IOException {
        // 1、创建对象
        FileInputStream fileInputStream = new FileInputStream("src\\C_io\\a.txt");

        // 2、读取数据（没有中文的情况，读取会乱码，但是拷贝不会）ps：每调一次.read()方法都会移动一次指针！以abcde为例：
        int b1 = fileInputStream.read(); // 只读1字节           （第一次）
        System.out.println(b1); // 返回对应的ascii码
        System.out.println((char)b1); // 强转为char类型

        int b2 = fileInputStream.read(); // 只读1字节           （第二次）
        System.out.println(b2);
        System.out.println((char)b2);

        // 提高效率（ 1024b = 1kb; 1024b * 1024b = 1m （1024个字节的平方等于1兆） 这用2b为例 ）
        byte[] bytes = new byte[2];
        int b3 = fileInputStream.read(bytes); // 读2个字节      （第三次）
        System.out.println(b3); // 返回读取了多少个字节（ps：注意和上面方法的ascii码不一样，它返回的是数组长度,ascii码存在byte[]里）
        System.out.println(new String(bytes)); // 字节数组变成字符串，打印读取到的内容

        int b4 = fileInputStream.read(bytes); // 读2个字节      （第四次）
        System.out.println(b4);
        // ps：由于第三次读取内容是cd，第四次只有c，所以直接打印的话会是c被e覆盖bytes[0]，而d没东西覆盖bytes[1]，结果为ed
        System.out.println(new String(bytes));
        // ps：把字节数组的一部分变成字符串，参数：字节数组，开始下标，个数
        System.out.println(new String(bytes,0,b4));

        // 3、释放资源
        fileInputStream.close();
    }
}
